import router from '@/router'
import store from '@/store'
import { config } from '@vue/test-utils'
import axios from 'axios'
import { Message } from 'element-ui'


// create an axios instance
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})

// 请求拦截器，用来注入token所有请求都会经过
// 记住拦截必须执行
service.interceptors.request.use(config=>{
    // 回调函数默认可以得到当前的请求配置数据, 一般形参命名为 config
  const token=store.state.user.token
  if(token){
    // 添加的token标准叫做 Bearer JWT
    config.headers.Authorization = `Bearer ${token}`
  }

    // return 语句不能卸载 if 里面, 不论加不加token都要 return
  return config
})


service.interceptors.response.use(res=>{
  // 如果成功的话，返回 return res.data.data，弹出成功提示框
  if(res.data.success){
 return res.data.data
  }else{
     // 如果错误就拒绝访问，弹出错误提示框
     Message.error(res.data.message)
     return Promise.reject(new Error(res.data.message))
  }
  
    },err=>{
      // 一般都是后端的大佬们 没时间处理我们试着搞搞
      // 一般有被动处理和主动处理(推荐用被动处理)
      //被动处理： 如果tooken出错(我们在应用的cookie乱改tooken,那么会报出系统错误提示)，所以我们
      // 让tooken失效时退出到登录页
      
      console.dir(err)
      if (err.response.data.code === 10002) {
        // token 相关
        store.commit('user/logout')
        router.push('/login')
        Message.error('超时, 请重新登录')
        return Promise.reject(new Error('超时, 请重新登录'))

}else{
    Message.error('系统错误')
    return Promise.reject(new Error('系统错误'))
}
  
  })
 



export default service
